package com.cmc.cloud.cmclink.doc.convert;

import com.cmc.cloud.cmclink.doc.api.document.rep.VgmCreateReqDto;
import com.cmc.cloud.cmclink.doc.api.document.rep.VgmRespDto;
import com.cmc.cloud.cmclink.doc.api.document.rep.VgmUpdateReqDto;
import com.cmc.cloud.cmclink.doc.api.document.req.VgmEdiReqDto;
import com.cmc.cloud.cmclink.doc.api.document.req.VgmImportReqDto;
import com.cmc.cloud.cmclink.doc.api.document.req.VgmQueryDto;
import com.cmc.cloud.cmclink.doc.entity.VgmDO;
import com.cmc.cloud.cmclink.doc.vo.vgm.*;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * VMG信息 Convert
 *
 * @author 集运管理员
 */
@Mapper
public interface VgmConvert {
    /**
     * 获取转换接口的实例
     */
    VgmConvert INSTANCE = Mappers.getMapper(VgmConvert.class);

    /**
     * 将创建请求VO转换为DO
     *
     * @param vgmCreateReqVoList 创建请求VO
     * @return DO
     */
    List<VgmDO> convert(List<VgmCreateReqVO> vgmCreateReqVoList);

    /**
     * 属性转换
     *
     * @param vgmImportReqVo
     * @return
     */
    @Mappings({
            @Mapping(target = "time", ignore = true)
    })
    VgmDO convert(VgmImportReqVO vgmImportReqVo);

    /**
     * 将更新请求VO转换为DO
     *
     * @param bean 更新请求VO
     * @return DO
     */
    @Mappings({
            @Mapping(target = "time", ignore = true)
    })
    VgmDO convert(VgmUpdateReqVO bean);

    /**
     * 将DO转换为查询响应VO
     *
     * @param bean DO
     * @return VO
     */
    VgmRespVO convert(VgmDO bean);

    /**
     * 将DO列表转换为查询响应VO列表
     *
     * @param list DO列表
     * @return VO List
     */
    List<VgmRespVO> convertList(List<VgmDO> list);

    /**
     * 属性转换
     *
     * @param vgmCreateReqVo
     * @return
     */
    @Mappings({
            @Mapping(target = "time", ignore = true)
    })
    VgmDO convert(VgmCreateReqVO vgmCreateReqVo);

    /**
     * 属性转换
     *
     * @param vgmQueryDto
     * @return
     */
    VgmQueryVO convert(VgmQueryDto vgmQueryDto);

    /**
     * 属性转换
     *
     * @param vgmDoList
     * @return
     */
    List<VgmRespDto> convertVgmRespDto(List<VgmDO> vgmDoList);

    /**
     * 属性转换
     *
     * @param vgmImportReqDtos
     * @return
     */
    List<VgmImportReqVO> convertVgmImportReqVo(List<VgmImportReqDto> vgmImportReqDtos);

    /**
     * 属性转换
     *
     * @param vgmImportReqDtos
     * @return
     */
    List<VgmImportReqDto> convertVgmImportReqDto(List<VgmImportReqVO> vgmImportReqDtos);

    /**
     * 属性转换
     *
     * @param vgmCreateReqDto
     * @return
     */
    VgmCreateReqVO convertVgmCreateReqVo(VgmCreateReqDto vgmCreateReqDto);

    /**
     * 属性转换
     *
     * @param vgmUpdateReqDto
     * @return
     */
    VgmUpdateReqVO convertVgmUpdateReqVo(VgmUpdateReqDto vgmUpdateReqDto);

    /**
     * 属性转换
     *
     * @param vgmUpdateReqVo
     * @return
     */
    VgmCreateReqVO convertVgmCreateVo(VgmUpdateReqVO vgmUpdateReqVo);


    /**
     * 属性转换
     *
     * @param vgmDo
     * @return
     */
    VgmUpdateReqVO convertVgmUpdateReqVo(VgmDO vgmDo);

    /**
     * 属性转换
     *
     * @param vgmEdiReqDto
     * @return
     */
    VgmCreateReqVO convertVgmCreateReqVo(VgmEdiReqDto vgmEdiReqDto);


    /**
     * 属性转换
     *
     * @param vgmDoList
     * @return
     */
    List<VgmQueryInfoRespVO> convertVgmQueryInfoRespVo(List<VgmDO> vgmDoList);
}
